Deno workspaces
#Deno #npm_Workspaces #JSR
はじめに
Denoにはワークスペース機能があります
使い方
プロジェクトのルートディレクトリにdeno.jsonを用意します
このdeno.jsonのworkspace.membersにワークスペースのメンバーとして管理するパッケージのパスを指定します (Deno v2.0.5以降のバージョンではワイルドカード形式での指定も可能です: "workspace": ["./packages/*"])
code:deno.json
{
"workspace": {
"members": [
"./packages/backend",
"./packages/frontend"
]
}
}
上記で宣言された./packages/backendと./packages/frontendのぞれぞれのディレクトリにもdeno.jsonを配置します
code:packages/backend/deno.json
{
"name": "@my-sample-project/backend",
"version": "0.0.1",
"exports": {
".": "./src/index.ts"
}
}
上記のように各ワークスペースのメンバーのdeno.jsonにはname, version, exportsフィールドを宣言します
deno task
deno taskで各メンバーのタスクをまとめて実行したい場合、--filterオプションを指定する必要があります (Deno v2.1)
ワークスペースを使うメリット
1. あるワークスペース内のメンバーから別のメンバーを参照できます
例えば、上記の場合、./packages/frontendからは./packages/backendを@my-sample-project/backendという名前でimportできます (deno.jsonのnameで宣言された名前で参照できる)
2. ルートのdeno.jsonと各ワークスペースメンバーのdeno.jsonの両方でImport mapsを定義することができます
ルートのdeno.jsonで定義されたImport mapsの定義は、全ワークスペースメンバーからも共有されます
npmなどにおけるワークスペースと同様に、ルートのdeno.jsonでは各ワークスペースのメンバーで共有される依存関係を定義しておくこともできます
3. ルートディレクトリでdeno publishを実行すると、全てのワークスペースメンバーがまとめてJSRへ公開されます
4. npmパッケージをDenoのワークスペースのメンバーとしても扱うことができるようです
これについてはまだ試したことはないです..
5. v2.1.8以降のバージョンであれば、ワークスペースの各メンバーごとにcompilerOptionsを定義できます (fix(check): compiler options from workspace members #27785)
ツール
@deno/bump-workspaces
リンク
feat: npm workspace and better Deno workspace support (denoland/deno#24334)
関連ページ
Deno workspacesを採用したプロジェクトでChangelogの生成を自動化する